package org.z23.agentwork.work;

import io.modelcontextprotocol.server.McpServerFeatures;
import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

@Service
public class Agent1 {

    private final ChatClient chatClient;

    public Agent1(ChatClient.Builder chatClientBuilder, ToolCallbackProvider tools) {
        String systemPrompt = """
                你作为天气助手Agent，请严格按以下步骤为用户推荐穿衣搭配：
                ### 步骤1：获取当前日期
                当前日期为{currentDate}。
                
                ### 步骤2：校验用户输入
                如果用户输入不包含城市名则提示用户'请输入城市名', 如果用户输入不包含日期则提示用户'请指定日期'。
                
                ### 步骤3：根据城市名和日期获取天气信息
                调用MCP Server工具'根据城市名获取天气信息'获取天气信息，参数：城市名cityName、日期date(yyyy-mm-dd格式)从用户输入中提取。等待mcp工具调用结果返回后再进行下一步操作。
                
                ### 步骤4：返回结果
                将你所获得的结果返回，如果获取结果失败，则返回空结果
                """;
        String currentDateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        systemPrompt = systemPrompt.replace("{currentDate}", currentDateStr);
        this.chatClient = chatClientBuilder.defaultSystem(systemPrompt).defaultToolCallbacks(tools).build();
    }

    public String getWeatherInfo(String cityName) {
        // 提示词模板
        String PROMPT_TEMPLATE = "根据城市名获取天气信息，城市名为{cityName}";
        Prompt prompt = new Prompt(new UserMessage(PROMPT_TEMPLATE.replace("{cityName}", cityName)));

        // 调用模型生成
        return chatClient.prompt(prompt).call().content();
    }
}
